const { Sequelize } = require('sequelize');
const { mqConfig } = require('./config.js');

// 创建Sequelize实例
const sequelize = new Sequelize(
    mqConfig.database,
    mqConfig.user,
    mqConfig.password,
    {
        host: mqConfig.host,
        port: mqConfig.port,
        dialect: 'mysql',
        timezone: '+08:00', // 设置时区为北京时间

        // 连接池配置
        pool: {
            max: 20,                    // 连接池最大连接数
            min: 5,                     // 连接池最小连接数
            acquire: 30000,             // 获取连接的最大等待时间（毫秒）
            idle: 10000                 // 连接在释放之前可以空闲的最长时间（毫秒）
        },

        // 查询配置
        define: {
            timestamps: false,          // 不使用Sequelize的默认时间戳（默认值：true）
            freezeTableName: true,      // 使用原始表名（默认值：false）
            underscored: false,         // 不使用下划线命名（默认值：false）
            charset: 'utf8mb4',
            collate: 'utf8mb4_general_ci'
        },

        // 查询选项
        query: {
            raw: false,                 // 返回原始数据（默认值：false）
            nest: true,                 // 嵌套结果（默认值：false）
            plain: false                // 返回单个对象（默认值：false）
        },

        // 重试配置
        retry: {
            max: 3,                     // 最大重试次数（默认值：3）
            timeout: 10000              // 重试超时时间（毫秒，默认值：10000）
        },

        // 事务配置
        isolationLevel: Sequelize.Transaction.ISOLATION_LEVELS.READ_COMMITTED, // 事务隔离级别（默认值：READ_COMMITTED）

        logging: false, // 关闭SQL日志输出（默认值：console.log）

        // 方言特定选项
        dialectOptions: {
            charset: 'utf8mb4',
            collate: 'utf8mb4_general_ci',
            supportBigNumbers: true,    // 支持大数字（默认值：false）
            bigNumberStrings: true,     // 大数字作为字符串返回（默认值：false）
            dateStrings: true,          // 日期作为字符串返回（默认值：false）
            typeCast: true              // 类型转换（默认值：true）
        }
    }
);

// 简化的数据库连接检测函数
async function checkSequelizeConnection() {
    console.log('🔍 [Sequelize] 正在检测数据库连接...');
    console.log(`   主机: ${mqConfig.host}:${mqConfig.port}`);
    console.log(`   数据库: ${mqConfig.database}`);
    console.log(`   用户: ${mqConfig.user}`);

    await sequelize.authenticate();
    console.log('✅ [Sequelize] 数据库连接成功');

    // 显示连接池状态
    const pool = sequelize.connectionManager.pool;
    console.log(`📊 连接池状态: 总连接数 ${pool.size}, 空闲连接数 ${pool.idle}, 使用中连接数 ${pool.using}`);

    return true;
}

module.exports = {
    sequelize,
    checkSequelizeConnection
};